#include "PptpServerRoute.h"

PptpServerRoute::PptpServerRoute(QObject *parent)
    : QObject{parent}
{
    setupRoutes();
}
void PptpServerRoute::setupRoutes()
{
    handler = std::make_shared<PptpRequestHandler>();

    routeMap["user/login"] = [this](const PptpMessage &msg)
    { return handler->userLogin(msg); };
    routeMap["user/register"] = [this](const PptpMessage &msg)
    { return handler->userRegister(msg); };
    routeMap["user/editUserInfo"] = [this](const PptpMessage &msg)
    { return handler->userEditUserInfo(msg); };
    routeMap["user/getUserInfo"] = [this](const PptpMessage &msg)
    { return handler->userGetUserInfo(msg); };
    routeMap["user/setAvatar"] = [this](const PptpMessage &msg)
    { return handler->userSetAvatar(msg); };
    routeMap["user/getAvatar"] = [this](const PptpMessage &msg)
    { return handler->userGetAvatar(msg); };
    routeMap["user/addAddress"] = [this](const PptpMessage &msg)
    { return handler->userAddAddress(msg); };
    routeMap["user/getAddressBook"] = [this](const PptpMessage &msg)
    { return handler->userGetAddressBook(msg); };
    routeMap["user/editAddress"] = [this](const PptpMessage &msg)
    { return handler->userEditAddress(msg); };
    routeMap["user/deleteAddress"] = [this](const PptpMessage &msg)
    { return handler->userDeleteAddress(msg); };
    routeMap["product/getProducts"] = [this](const PptpMessage &msg)
    { return handler->productGetProducts(msg); };
    routeMap["order/productBuy"] = [this](const PptpMessage &msg)
    { return handler->orderProductBuy(msg); };
    routeMap["user/orderList"] = [this](const PptpMessage &msg)
    { return handler->orderOrderList(msg); };
    routeMap["product/getProductsById"] = [this](const PptpMessage &msg)
    { return handler->productGetProductsById(msg); };
}
QByteArray PptpServerRoute::dispatchRequest(const QByteArray &readMessage)
{
    PptpMessage pptpRequest;
    pptpRequest.parseJson(readMessage);
    QString path = pptpRequest.getPath();

    qDebug() << "收到请求：" << path;

    // 检查请求的路径是否存在于路由映射表中
    if (routeMap.contains(path))
    {
        // 如果存在，则调用对应的处理函数
        return routeMap[path](pptpRequest);
    }
    else
    {
        // 如果不存在，则返回一个错误响应
        qDebug() << "非法请求路径路径：" << path;
        PptpMessage pptpResponse;
        QJsonObject parameters;
        pptpResponse.setParameters(parameters);
        return pptpResponse.wrapJson();
    }

    // auto it = routeMap.find(path);
    // return it.value()(pptpRequest);
}
